<?php

/**
*魔术重载
*/
class A
{
   // public $type;
   protected $age;
    
    function __construct($type=1)
    {
        echo 'contruct<br/>';
        $this->type = $type;
    }
    //即使不unset对象，程序结束自动调用此方法
    function __destruct()
    {
        echo '<br/>destruct<br/>';
    }
}

$a = new A();
//即使没有重载方法__set,依然可以生成public属性
$a->name = '张三';
var_dump($a);



class B
{
    protected $age = 19;

    function __serialize():array
    {
        return ['age' => $this->age];
    }
    function __unserialize($data)
    {
        echo '__unserialize<br/>';
    }
}

$b = new B;
$data = serialize($b);
//此函数将会传递从 __serialize() 返回的恢复数组。然后它可以根据需要从该数组中恢复对象的属性。
$c = unserialize($data);
var_dump($c);



class C
{
    function __invoke()
    {
        echo "对象的函数调用";
    }
}

$c = new C();
$c(123);










